home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume89 / unix / cal.1 < prev    next >
Text File  |  1989-05-03  |  16KB  |  529 lines

  1. Path: xanth!ames!oliveb!sun!rishathra!page
  2. From: page%rishathra@Sun.COM (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v89i111:  cal - unix(tm)-like calendar
  5. Message-ID: <102551@sun.Eng.Sun.COM>
  6. Date: 3 May 89 06:49:22 GMT
  7. Sender: news@sun.Eng.Sun.COM
  8. Lines: 518
  9. Approved: page@sun.com
  10.  
  11. Submitted-by: brant@uf.msc.umn.edu (Gary Brant)
  12. Posting-number: Volume 89, Issue 111
  13. Archive-name: unix/cal.1
  14.  
  15. This is my clone of the *nix cal program.  It has been in gestation
  16. for about six months waiting for my inspiration at handling the Sep.
  17. 1752 discontinuity.  Well, it's a hack but it gives the same results
  18. as the *nix version.
  19.  
  20. [uuencoded executable included.  ..bob]
  21.  
  22. # This is a shell archive.
  23. # Remove anything above and including the cut line.
  24. # Then run the rest of the file through 'sh'.
  25. # Unpacked files will be owned by you and have default permissions.
  26. #----cut here-----cut here-----cut here-----cut here----#
  27. #!/bin/sh
  28. # shar: SHell ARchive
  29. # Run the following text through 'sh' to create:
  30. #    README
  31. #    cal.doc
  32. #    cal.c
  33. #    makefile
  34. #    cal.uu
  35. # This is archive 1 of a 1-part kit.
  36. # This archive created: Tue May  2 23:43:50 1989
  37. echo "extracting README"
  38. sed 's/^X//' << \SHAR_EOF > README
  39. XThis is a calendar program based on  one seen on a local *nix machine.
  40. XI made the interface a little more friendly by adding 1900 to years
  41. Xless than 100 and allowing for spelling month names (3 char. significance)
  42. X
  43. XThis program is freely distributable, as long as you leave my name in
  44. Xthe source & don't sell it for a profit.
  45. X
  46. X
  47. X        Gary Brant
  48. X
  49. X    US mail: 1355 Eustis St. #1
  50. X         St. Paul, MN 55108
  51. X
  52. X    ARPA:     brant@uf.msc.umn.edu
  53. X
  54. SHAR_EOF
  55. echo "extracting cal.doc"
  56. sed 's/^X//' << \SHAR_EOF > cal.doc
  57. X
  58. XCAL            USER COMMANDS                CAL
  59. X
  60. X
  61. X
  62. XNAME
  63. X     cal - display calendar
  64. X
  65. XSYNOPSIS
  66. X     cal [ month ] [ year ]
  67. X
  68. XDESCRIPTION
  69. X     Cal displays a calendar for the specified year.  If a  month
  70. X     is  also  specified,  a  calendar  for  that  month  only is
  71. X     displayed.  If neither is  specified,  a  calendar  for  the
  72. X     present month is printed.
  73. X
  74. X     Year can be between 100 and 9999.  If you specify a year less
  75. X     than 100, the year is incremented by 1900.  Also, the year is
  76. X     always considered  to  start  in  January, even though this
  77. X     is historically naive.
  78. X
  79. X     month is a number between 1 and 12, or one of {Jan, Feb, ...}
  80. X     case is insignificant.
  81. X
  82. X     The calendar produced is that for England and her colonies.
  83. X
  84. X     Try September 1752.
  85. SHAR_EOF
  86. echo "extracting cal.c"
  87. sed 's/^X//' << \SHAR_EOF > cal.c
  88. X/* cal.c - print calendar for one month or one year
  89. X *
  90. X * cal [month] [year]
  91. X * 
  92. X * cal (C) 1988 by Gary L. Brant
  93. X */
  94. X
  95. X#include <stdio.h>
  96. X#include <fcntl.h>
  97. X
  98. X#define DPY    365L    /* days per year */
  99. X#define FUDGE1    1    /* needed to make day of week come out right */
  100. X#define FUDGE2    6    /* for old style (Julian) calendar */
  101. X
  102. Xint days[12] = {
  103. X    31,  28,  31,  30,    31,  30,  31,  31,  30,  31,  30,  31
  104. X};
  105. Xint mdays[13] = {
  106. X     0,  31,  59,  90, 120, 151, 181, 212, 243, 273, 304, 334, 365
  107. X};
  108. Xchar *months[12] = {
  109. X   "January", "February", "March",     "April",   "May",      "June",
  110. X   "July"   , "August"    , "September", "October", "November", "December"
  111. X};
  112. Xchar dayline[] = "  S  M Tu  W Th  F  S\n";
  113. Xchar line[8][68];        /* line buffer */
  114. Xint multi = 0;
  115. Xextern struct _dev *_devtab;
  116. Xstruct FileHandle *err, *out, *Output ();
  117. X
  118. X
  119. Xmain(argc, argv)
  120. Xint argc;
  121. Xchar *argv[];
  122. X{
  123. X   int m, d, y, i, k;
  124. X
  125. X   out = Output ();
  126. X   getdate (&m, &d, &y);
  127. X   if (argc == 1) {
  128. X      fixtab (&y);
  129. X      printmonth (m, y);
  130. X      exit (0);
  131. X   }
  132. X
  133. X   if ((k = convert (argv[1])) == 0) {
  134. X      m = 0;
  135. X      for (i = 0; i < 12; i++)
  136. X     if (cmpmonth (argv[1], months[i]) == 0) {
  137. X        m = i + 1;
  138. X        break;
  139. X     }
  140. X      if (m == 0) {
  141. X     badarg (argv[1]);
  142. X      }
  143. X   }
  144. X
  145. X   if (argc == 2) {
  146. X      if (k == 0) {
  147. X     fixtab (&y);
  148. X     printmonth (m, y);
  149. X      } else {
  150. X     multi = 1;
  151. X     fixtab (&k);
  152. X     for (m = 1; m < 13; m++)
  153. X        printmonth (m, k);
  154. X      }
  155. X      exit (0);
  156. X   }
  157. X
  158. X   if (k > 0 && k < 13)
  159. X      m = k;
  160. X   else if (m == 0 || k != 0) {
  161. X      badarg (argv[1]);
  162. X   }
  163. X
  164. X   if (argc == 3) {
  165. X      if ((y = convert (argv[2])) == 0) {
  166. X     badarg (argv[2]);
  167. X      }
  168. X   }
  169. X   fixtab (&y);
  170. X   printmonth (m, y);
  171. X}
  172. X
  173. X
  174. X/* printmonth () - either prints an entire month at a time or multiplexes
  175. X * a month into a buffer, dumping the buffer after the third call.
  176. X */
  177. Xprintmonth (m, y)
  178. Xregister int m;
  179. Xint y;
  180. X{
  181. X   int dow;            /* day of week for first day of month */
  182. X   register int first, last;
  183. X   register int index, l, p;
  184. X   static int q = 0, maxl = 0;
  185. X   int i, mday[32];        /* table of day numbers for month */
  186. X
  187. X   if (multi) {
  188. X      q++;
  189. X      if (q > 3) {
  190. X     maxl = 0;
  191. X     q = 1;
  192. X      }
  193. X   } else
  194. X      q = 1;
  195. X   p = 22 * (q - 1);        /* character position of line in buffer */
  196. X   first = 4;
  197. X   last = strlen (months[--m]) + first;
  198. X   blank (&line[0][p], first);
  199. X
  200. X   strcpy (&line[0][p+first], months[m]);    /* copy month name into buf */
  201. X   itoa (y, &line[0][p+last], 5);        /* encode year */
  202. X   if (multi && q != 3)
  203. X      blank (&line[0][p+last+5], 22 - last - 5);
  204. X   else {
  205. X      line[0][p+last+5] = '\n';
  206. X      line[0][p+last+6] = '\0';
  207. X      puts (line[0]);
  208. X      puts (line[1]);
  209. X   }
  210. X
  211. X   dow = weekday (m, y);
  212. X   index = 3 * dow;
  213. X   blank (&line[2][p], index);
  214. X   last = 7 - dow;
  215. X   first = 1;
  216. X   l = 2;
  217. X
  218. X   for (i = 1; i <= days[m]; i++)    /* fill day numbers table */
  219. X      mday[i] = i;
  220. X   if ((y == 1752) && (m == 8))    /* special case Sep. 1752 */
  221. X      for (i = 3; i <= days[m]; i++)
  222. X     mday[i] += 11;
  223. X   while (first <= days[m]) {    /* loop thru month one week per line */
  224. X      while (first <= last) {    /* for each day in week encode day of month */
  225. X     itoa (mday[first++], &line[l][p+index], 3);
  226. X     index += 3;
  227. X      }
  228. X      if (multi && q != 3) {
  229. X     blank (&line[l][p+index], 22 - index);
  230. X     if (l > maxl)
  231. X        maxl = l;
  232. X      } else {
  233. X     line[l][p+index++] = '\n';
  234. X     line[l][p+index] = '\0';
  235. X     puts (line[l]);
  236. X      }
  237. X      last = (last + 7) > days[m] ? days[m] : last + 7;
  238. X      l++;
  239. X      index = 0;
  240. X   }
  241. X
  242. X   if (multi)
  243. X      if (q != 3)    /* blank fill remaining lines this month */
  244. X     while (l < 8)
  245. X        blank (&line[l++][p], 22);
  246. X      else        /* determine if any lines remain to be written */
  247. X     while (l <= maxl) {
  248. X        line[l][p] = '\n';
  249. X        line[l][p+1] = '\0';
  250. X        puts (line[l++]);
  251. X     }
  252. X}
  253. X
  254. X
  255. Xblank (line, num)
  256. Xregister char line[];
  257. Xregister int num;
  258. X{
  259. X   while (num >= 0)
  260. X      line[num--] = ' ';
  261. X}
  262. X
  263. X
  264. X/* itoa - integer to ascii conversion, with leading blanks.
  265. X */
  266. Xitoa (num, str, ndig)
  267. Xregister int num, ndig;
  268. Xregister char str[3];
  269. X{
  270. X   register int i, rmd;
  271. X
  272. X   while (ndig-- > 0) {
  273. X      i = num / 10;
  274. X      rmd = num - 10 * i;
  275. X      str[ndig] = (num > 0) ? '0' + rmd : ' ';
  276. X      num = i;
  277. X   }
  278. X}
  279. X
  280. X
  281. X/* getdate - return month, day, year.  Valid through: 02/28/2100.
  282. X */
  283. X
  284. Xgetdate (m, d, y)
  285. Xint *m, *d, *y;
  286. X{
  287. X   int i, j, k, z;
  288. X   long l, clock[3], ndays;
  289. X
  290. X   DateStamp (clock);        /* get system datestamp */
  291. X   ndays = clock[0];        /* days since 01/01/1978 */
  292. X   k = (++ndays + DPY) / DPY;
  293. X   do {
  294. X      j = k >> 2;
  295. X      i = ndays - DPY * --k;
  296. X   } while (j >= i);
  297. X   ndays = ndays - DPY * k - ((k+1) >> 2);
  298. X   *y = k + 1978;
  299. X   z = ((*y % 4) == 0 && (ndays+3)>>5 > 0) ? 1 : 0;
  300. X   *m = (mdays[i=(ndays>>5)+1]+z >= ndays) ? i : i + 1;
  301. X   *d = ndays - mdays[*m-1] - z;
  302. X}
  303. X
  304. X
  305. X/* fixtab - correct for leapyears; also replicate day-of-week line.
  306. X */
  307. Xfixtab (y)
  308. Xregister int *y;
  309. X{
  310. X   register int i;
  311. X
  312. X   if (*y < 100)    /* a civility - not really interested in years */
  313. X      *y += 1900;    /* 1st century AD */
  314. X   if ((*y % 4) == 0) {
  315. X      if (((*y % 100) != 0) || ((*y % 400) == 0) || (*y < 1753)) {
  316. X     days[1] = 29;
  317. X     for (i = 2; i < 13; i++)
  318. X        mdays[i]++;
  319. X     if (*y == 1752)
  320. X        days[8] -= 11;
  321. X      }
  322. X   }
  323. X   if (multi) {
  324. X      for (i = 0; i < 66; i += 22)
  325. X     strcpy (&line[1][i], dayline);
  326. X      line[1][21] = ' ';
  327. X      line[1][43] = ' ';
  328. X   } else
  329. X      strcpy (&line[1][0], dayline);
  330. X}
  331. X
  332. X
  333. X/* convert () - convert string from ascii to binary integer
  334. X */
  335. Xconvert (string)
  336. Xchar string[];
  337. X{
  338. X   register int c, i, result;
  339. X
  340. X   i = result = 0;
  341. X   while (string[i] != '\0') {
  342. X      if ((c = string[i++] - '0') < 0 || c > 9)
  343. X     return (0);
  344. X      else {
  345. X     result *= 10;
  346. X     result += c;
  347. X      }
  348. X   }
  349. X   return (result);
  350. X}
  351. X
  352. X
  353. X/* puts () - write string to standard output
  354. X */
  355. Xputs (string)
  356. Xchar string[];
  357. X{
  358. X   Write (out, string, (long) strlen (string));
  359. X}
  360. X
  361. X
  362. X/* weekday - return day-of-week for first day of month.
  363. X */
  364. Xweekday (m, y)
  365. Xregister int m, y;
  366. X{
  367. X   if (y > 1752 || (y == 1752 && m > 8))
  368. X      return (mdays[m] + y + --y / 4 - y / 100 + y / 400 + FUDGE1) % 7;
  369. X   else
  370. X      return (mdays[m] + y + --y / 4             + FUDGE2) % 7;
  371. X}
  372. X
  373. X
  374. X
  375. Xbadarg (string)
  376. Xchar string[];
  377. X{
  378. X   err = _devtab[2].fd;
  379. X   Write (err, string, (long) strlen(string));
  380. X   Write (err, " bad argument\n", 14L);
  381. X   exit (10);
  382. X}
  383. X
  384. X
  385. X/* cmpmonth () - compare month argument entered by user with month name.
  386. X * The comparison will be made case insensitive.
  387. X */
  388. Xcmpmonth (str1, str2)
  389. Xregister char str1[], str2[];
  390. X{
  391. X   register int j;
  392. X
  393. X   if ((j = (toupper(str1[0])-str2[0])) != 0)
  394. X      return (j);
  395. X   else if ((j = tolower(str1[1])-str2[1]) != 0)
  396. X      return (j);
  397. X   else
  398. X      return (tolower(str1[2])-str2[2]);
  399. X}
  400. X
  401. X
  402. X/* _wb_parse () - just to keep down the size of the executable
  403. X */
  404. X_wb_parse ()
  405. X{
  406. X}
  407. SHAR_EOF
  408. echo "extracting makefile"
  409. sed 's/^X//' << \SHAR_EOF > makefile
  410. XCFLAGS=-n
  411. X
  412. Xcal:    cal.o
  413. X    ln -g cal.o -lc
  414. X
  415. Xcal.o:    cal.c
  416. X
  417. SHAR_EOF
  418. echo "extracting cal.uu"
  419. sed 's/^X//' << \SHAR_EOF > cal.uu
  420. X
  421. Xbegin 777 cal
  422. XM```#\P`````````#``````````(```04````OP````$```/I```$%$[Z"7A*J
  423. XM86YU87)Y`$9E8G)U87)Y`$UA<F-H`$%P<FEL`$UA>0!*=6YE`$IU;'D`075GM
  424. XM=7-T`%-E<'1E;6)E<@!/8W1O8F5R`$YO=F5M8F5R`$1E8V5M8F5R`$Y5__9.,
  425. XMN@](*4""LDAM__I(;?_\2&W__DZZ!1I/[P`,#&T``0`(9B!(;?_Z3KH&&%A/R
  426. XM/RW_^C\M__Y.N@%*6$]"9TZZ#4I43R!M``HO*``$3KH&L%A/.T#_]F960FW_D
  427. XM_D)M__@P+?_X2,#E@$'L@#0O,`@`(&T`"B\H``1.N@?B4$]*0&8,,"W_^%)`1
  428. XM.T#__F`,4FW_^`QM``S_^&W&2FW__F8.(&T`"B\H``1.N@=46$\,;0`"``AF6
  429. XM6$IM__9F&DAM__I.N@6`6$\_+?_Z/RW__DZZ`+)83V`P.7P``8!\2&W_]DZZ)
  430. XM!6!83SM\``'__C\M__8_+?_^3KH`C%A/4FW__@QM``W__FWF0F=.N@R`5$]*"
  431. XM;?_V;Q`,;0`-__9L"#MM__;__F`:2FW__F<&2FW_]F<.(&T`"B\H``1.N@;$J
  432. XM6$\,;0`#``AF(B!M``HO*``(3KH%KEA/.T#_^F8.(&T`"B\H``A.N@::6$](`
  433. XM;?_Z3KH$U%A//RW_^C\M__YA!EA/3EU.=4Y5_[Q(YP\P."T`"$IL@'QG&%)L?
  434. XM@'X,;``#@'YO"D)L@(`Y?``!@'Y@!CE\``&`?C`L@'Y30,'\`!8V0'H$4T0PG
  435. XM!$C`Y8!![(`T+S`(`$ZZ!PA83SP`W$4_!3`+2,!![(".T(@O`$ZZ`M)<3S`$8
  436. XM2,#E@$'L@#0O,`@`,`O014C`0>R`CM"(+P!.N@:^4$\_/``%,`O01DC`0>R``
  437. XMCM"(+P`_+0`*3KH"O%!/2FR`?&<H#&P``X!^9R!P%I!&6T`_`#`+T$9:0$C`:
  438. XM0>R`CM"(+P!.N@)H7$]@,C`+T$9:0$'L@(X1O``*```P"]!&7$!![(".0C``(
  439. XM`$AL@(Y.N@3*6$](;(#23KH$P%A//RT`"C\$3KH$VEA/.T#__CXM__[/_``#L
  440. XM/P<P"TC`0>R!%M"(+P!.N@((7$]\!YQM__YZ`31\``([?``!__Q@%C`M__Q(0
  441. XMP..`0>W_O#&M__P(`%)M__PP!$C`XX!![(`",BW__+)P"`!OU@QM!M@`"F8X]
  442. XMN'P`"&8R.WP``__\8!8P+?_\2,#C@$'M_[S1P`90``M2;?_\,`1(P..`0>R`C
  443. XM`C(M__RR<`@`;]8P!$C`XX!![(`"NG`(`&X``.ZZ1FXT/SP``S`*P?P`1#(+_
  444. XMTD=(P="!0>R`CM"(+P`P!5)%2,#C@$'M_[P_,`@`3KH!;%!/5D=@R$IL@'QG^
  445. XM-@QL``.`?F<N<!:01S\`,`K!_`!$,@O21TC!T(%![(".T(@O`$ZZ`1!<3[3LQ
  446. XM@(!O!#E*@(!@1#`*P?P`1#('4D?22TC!T(%![(".$;P`"@@`,`K!_`!$,@O2"
  447. XM1TC!T(%![(".0C`(`#`*P?P`1$'L@([0B"\`3KH#3%A/,`9>0#($2,'C@4'LU
  448. XM@`*P<!@`;Q(P!$C`XX!![(`"(@`P,!@`8`0P!EY`/`!22GX`8`#_!$IL@'QGM
  449. XM>@QL``.`?F<HM/P`"&P@/SP`%C`*4DK!_`!$,@M(P="!0>R`CM"(+P!A6%Q/K
  450. XM8-I@2K3L@(!N1#`*P?P`1#(+2,'0@4'L@(X1O``*"``P"L'\`$0R"U)!2,'0&
  451. XM@4'L@(Y",`@`,`I22L'\`$1![(".T(@O`$ZZ`II83V"V3-\,\$Y=3G5.50``H
  452. XM2.<(("1M``@X+0`,2D1M##`$4T05O``@``!@\$S?!!!.74YU3E4``$CG#R`X:
  453. XM+0`()&T`"CHM``XP!5-%2D!O*#P$2,:-_``*,`;!_``*/@2>0$I$;P@P!]!\Y
  454. XM`#!@`G`@%8!0`#@&8-!,WP3P3EU.=4Y5_^1(;?_H3KH)[EA/*VW_Z/_D4JW_J
  455. XMY"`M_^30O````6TB/````6U.N@>(.T#_^C`M__KD0#M`__Q3;?_Z,"W_^L'\A
  456. XM`6TB+?_DDH`[0?_^,"W__+!M__YLUC`M__K!_`%M(BW_Y)*`,"W_^E)`Y$!(X
  457. XMP)*`*T'_Y"!M`!`P+?_ZT'P'NC"`(&T`$#`02,"!_``$2$!*0&80("W_Y%:`%
  458. XMZH!*@&\$<`%@`G``.T#_^"`M_^3J@%*`.T#__DC`XX!![(`:,C`(`-)M__A(:
  459. XMP;*M_^1M!C`M__Y@!C`M__Y20"!M``@P@"!M``@P$%-`2,#C@$'L@!HR,`@`K
  460. XM2,$@+?_DD($R+?_X2,&0@2!M``PP@$Y=3G5.50``2.<(("1M``@,4@!D;`0&\
  461. XM4@=L,!)(P('\``1(0$I`9DPP$DC`@?P`9$A`2D!F%#`22,"!_`&02$!*0&<&B
  462. XM#%(&V6PJ.7P`'8`$>`(P!$C`XX!![(`:4G`(`%)$N'P`#6WJ#%(&V&8&!&P`9
  463. XM"X`22FR`?&<P>`!(;(!D,`1(P$'L@-+0B"\`3KH!_E!/V'P`%KA\`$)MX!E\@
  464. XM`""`YQE\`""`_6`.2&R`9$AL@-).N@'84$],WP003EU.=4Y5``!(YPX`?``Z(
  465. XM!B!M``A*,%``9S`P!5)%(&T`"!(P``!(@3@!F'P`,$I$;0:X?``);PIP`$S?W
  466. XM`'!.74YUS?P`"MQ$8,8P!F#L3E4``"\M``A.N@&(6$](P"\`+RT`""\L@K).P
  467. XMN@@"3^\`#$Y=3G5.50``2.<,`#@M``@Z+0`*NGP&V&X,NGP&V&9*N'P`"&]$Y
  468. XM,`1(P..`0>R`&B(`,#`8`%-%,@5(P8/\``300=!%,@5(P8/\`&2003(%2,&#X
  469. XM_`&0T$%20$C`@?P`!TA`3-\`,$Y=3G4P!$C`XX!![(`:(@`P,!@`4T4R!4C!E
  470. XM@_P`!-!!T$5<0$C`@?P`!TA`8,Y.50``(&R"MBEH``R"KB\M``A.N@#(6$](>
  471. XMP"\`+RT`""\L@JY.N@="3^\`#$AX``Y(>@`<+RR"KDZZ!RY/[P`,/SP`"DZZ$
  472. XM!4943TY=3G4@8F%D(&%R9W5M96YT"@``3E4``$CG"#`D;0`()FT`#!`22(`_;
  473. XM`$ZZ`'A43Q(32($X`)A!9PHP!$S?#!!.74YU$"H``4B`/P!.N@!N5$\2*P`!5
  474. XM2($X`)A!9P0P!&#:$"H``DB`/P!.N@!05$\2*P`"2(&006#"3E4``$Y=3G4@=
  475. XM;P`$(`@B;P`($-EF_$YU(&\`!"`(2AAF_)'`(`A3@$YU<``0+P`%L#P`8&,*]
  476. XML#P`>F($D#P`($YU<``0+P`%L#P`0&,*L#P`6F($T#P`($YU87!#[(".1>R`B
  477. XMCK7)9@XR/`";:PAT`"+"4<G__"E/@KHL>``$*4Z"ODCG@(`(+@`$`2EG$$OZ+
  478. XM``A.KO_B8`9"I_-?3G-#^@`@3J[^:"E`@L)F#"X\``.`!TZN_Y1@!$ZZ`!I0^
  479. XM3TYU9&]S+FQI8G)A<GD`2?D``'_^3G5.50``+PI(>0`!```P+(""P?P`!B\`K
  480. XM3KH%[BE`@K903V840J=(>0`!``!.N@6V4$\N;(*Z3G4@;(*V0F@`!"!L@K8Q"
  481. XM?``!`!`@;(*V,7P``0`*(&R"NB`L@KJ0J``$4(`I0(+&(&R"QB"\34%.6$*GC
  482. XM3KH%HB1`2JH`K%A/9RXO+0`,+RT`""\*3KH`KCE\``&"RB!L@K8`:(````0@\
  483. XM;(*V`&B````*3^\`#&!"2&H`7$ZZ!9Y(:@!<3KH%?BE`@LP@;(+,2J@`)%!/:
  484. XM9Q`@;(+,(F@`)"\13KH$KEA/+RR"S"\*3KK^2"EL@LR"T%!/3KH$KB!L@K8@"
  485. XM@$ZZ!+X@;(*V(4``!F<62'@#[4AZ`"I.N@26(&R"MB%```Q03R\L@M`_+(+4N
  486. XM3KKU0$)G3KH"R%!/)%].74YU*@!.50``2.<,,"1M`!`@;0`(2J@`K&<8(&T`@
  487. XM""`H`*SE@"@`($0@*``0Y8`F0&`$)FR`A!`32(!(P-"M``Q4@#E`@M9"IS`LP
  488. XM@M9(P"\`3KH$@"E`@MA03V8(3-\,,$Y=3G40$TB`.@`_!2!+4H@O""\L@MA.H
  489. XMN@%^,`5(P"!`T>R"V$/Z`400V6;\/RT`#B\*+RR"V$ZZ`3H@;(+80C!0`#E\"
  490. XM``&"U#`%2,#0K(+8)D!2BR1+3^\`%!`32(`Z`+!\`"!G&+I\``EG$KI\``QG_
  491. XM#+I\``UG!KI\``IF!%*+8-@,$P`@;7H,$P`B9BY2BR!+4HL0$$B`.@!G'B!*L
  492. XM4HH0A;I\`")F$`P3`")F!%*+8`9"*O__8`)@UF`X($M2BQ`02(`Z`&<FNGP`T
  493. XM(&<@NGP`"6<:NGP`#&<4NGP`#6<.NGP`"F<(($I2BA"%8,X@2E**0A!*168"C
  494. XM4XM2;(+48`#_6D(20J<P+(+44D!(P.6`+P!.N@->*4""T%!/9@A";(+48`#^;
  495. XMV'H`)FR"V&`D,`5(P.6`(&R"T"&+"``@2R`(2AAF_)'`4X@P"%)`2,#7P%)%Y
  496. XMNFR"U&W6,`5(P.6`(&R"T$*P"`!@`/Z4(``P/'__8`0P+P`,(&\`!$H89OQ3N
  497. XM2")O``A30!#95\C__&<"0A`@+P`$3G5,[P,```0@"#(O``Q@`A#95\G__&<&R
  498. XM4D%@`D(84<G__$YU2.=(`$*$2H!J!$2`4D1*@6H&1($*1``!83Y*1&<"1(!,K
  499. XMWP`22H!.=4CG2`!"A$J`:@1$@%)$2H%J`D2!81H@`6#8+P%A$B`!(A]*@$YUO
  500. XM+P%A!B(?2H!.=4CG,`!(04I!9B!(038!-`!"0$A`@,,B`$A`,@*"PS`!0D%(^
  501. XM04S?``Q.=4A!)@$B`$)!2$%(0$)`=`_0@-.!MH%B!)*#4D!1RO_R3-\`#$YU4
  502. XM3E4``$JL@MQG!B!L@MQ.D#\M``A.N@`(5$].74YU3E7__"\$,"T`"$C`*T#_I
  503. XM_$JL@K9G*'@`8`H_!$ZZ`/Y43U)$N&R`@FWP,"R`@L'\``8O`"\L@K9.N@'<H
  504. XM4$]*K(+@9P8@;(+@3I!*K("(9PHO+("(3KH!6%A/2JR"Y&<((&R"Y""L@NA*'
  505. XMK(+L9PHO+(+L3KH!=%A/2JR"\&<*+RR"\$ZZ`6183TJL@O1G"B\L@O1.N@%4]
  506. XM6$]*K(+X9PHO+(+X3KH!1%A/+'@`!`@N``0!*6<4+PU+^@`*3J[_XBI?8`9"Q
  507. XMI_-?3G-*K(+,9C!*K(+89R@P+(+62,`O`"\L@MA.N@$T,"R"U%)`2,#E@"\`P
  508. XM+RR"T$ZZ`2!/[P`08`Y.N@$.+RR"S$ZZ`2I83R`M__PN;(*Z3G4H'TY=3G5.0
  509. XM50``2.<.(#@M``@P!,'\``8D0-7L@K9*1&T*N&R`@FP$2I)F$#E\``*"_'#_$
  510. XM3-\$<$Y=3G4(*@`'``1F""\23KH`"EA/0I)P`&#B(B\`!"QL@L).[O_<(B\`1
  511. XM!"QL@L).[O^"(B\`!"QL@L).[O]`+&R"PD[N_\I,[P`&``0L;(+"3N[_XD[ZP
  512. XM``(L;(+"3N[_Q$[Z``(B+P`$+&R"PD[N_Z9.^@`"3.\`#@`$+&R"PD[N_]!(_
  513. XMYP$$3.\@@``,+&R"ODZN_Y1,WR"`3G4B;P`$+&R"OD[N_F),[P`#``0L;(*^K
  514. XM3N[_.B)O``0L;(*^3N[^VBQL@KY.[O]\(F\`!"`O``@L;(*^3N[_+B!O``0LQ
  515. XM;(*^3N[^C")O``0L;(*^3N[^AB!O``0L;(*^3N[^@````^P````!`````0``U
  516. XM">X````````#\@```^H````C`!\`'``?`!X`'P`>`!\`'P`>`!\`'@`?````I
  517. XM'P`[`%H`>`"7`+4`U`#S`1$!,`%.`6T````$````#````!4````;````(0``@
  518. XM`"4````J````+P```#8```!`````2````%$@(%,@($T@5'4@(%<@5&@@($8@O
  519. XM(%,*````````````%`````````````````/L````#``````````R````-@``T
  520. XM`#H````^````0@```$8```!*````3@```%(```!6````6@```%X````````#[
  521. X-\@```^L````!```#\D8`<
  522. X``
  523. Xend
  524. Xsize 4468
  525. SHAR_EOF
  526. echo "End of archive 1 (of 1)"
  527. # if you want to concatenate archives, remove anything after this line
  528. exit
  529.